#include "服务器与客户端.h"
#include "功能区.h"
#include "管理员.h"
#include "组长.h"
#include "组员.h"

// 把字符串IP转为数字IP
uint32_t stringIPtoNum(char *pIP)
{
     uint32_t nIP = 0;
     // AF_INET是代表IPV4地址的意思，AF_INET6代表IPV6
     inet_pton(AF_INET, pIP, &nIP);
     return nIP;
}

// 把数字IP转为字符串IP
void numIPtoString(uint32_t ip, char *psIP, int size)
{
     inet_ntop(AF_INET, &ip, psIP, size);
}

// //接受服务器发来的消息
// void * work(void * pData)
// {
//      int fd = *(int *)pData;
//      //循环的读取消息
//      while (1)
//      {
//           MSG m1;
//           //read是一个阻塞函数
//           if(0>=read(fd,&m1,sizeof(m1)))
//           {
//                perror("服务器完了，我也不想活了");
//                exit(0);
//                break;
//           }
//           //说明收到了一个退出消息，直接跳出循环
//           if(strcmp(m1.buf,"quit")==0)
//           {
//                exit(0);
//                break;
//           }
//           printf("收到服务器消息：%s\n",m1.buf);
//      }

// }
void boss_menu(int fd)
{
     while (1)
     {
          printf("1.查看成员信息 2.找回密码（暂施工） 3.修改用户信息 4.注销用户信息 5.添加聊天屏蔽词（暂施工）6.退出 \n");
          char buf[16];
          scanf("%s", buf);
          if (strcmp(buf, "1") == 0)
          {
               printuser(fd);
          }
          else if (strcmp(buf, "2") == 0)
          {
          }
          else if (strcmp(buf, "3") == 0)
          {
               changemeun(fd);
          }
          else if (strcmp(buf, "4") == 0)
          {
               delmeun(fd);
          }
          else if (strcmp(buf, "5") == 0)
          {
          }
          else if (strcmp(buf, "6") == 0)
          {
               return;
          }
     }
}

void mainMenu(int fd, W_REGIST lg)
{
     while (1)
     {
          MSG m1;
          m1.type = whowmessage;
          strcpy(m1.data, lg.name);
          int ret = send(fd, &m1, sizeof(m1), 0);
          if (ret == -1)
          {
               perror("数据发送失败");
               exit(0);
          }
          ret = recv(fd, &m1, sizeof(m1), 0);
          if (ret == -1)
          {
               perror("数据接收失败");
               exit(0);
          }
          char cir[256];
          int num = atoi(m1.data);
          printf("请选择你要的操作:\n");
          sprintf(cir, "1.查看,完成任务(未完成数量[%d])\n2.删除任务\n3.离职\n4.联系组长/组员\n5.退出\n", num);
          printf("%s", cir);
          char buf[16];
          scanf("%s", buf);
          if (strcmp(buf, "1") == 0)
          {
               overmess(fd, lg);

          }if (strcmp(buf, "2") == 0)
          {
               delwomess(fd, lg);
          }
          if (strcmp(buf, "3") == 0)
          {
               delwoker(fd, lg);
          }
          if (strcmp(buf, "4") == 0)
          {
               printf("1.联系组长 2.联系组员 \n");
          }
          if (strcmp(buf, "5") == 0)
          {
               return;
          }
     }
}
void group_meun(int fd, B_REGIST lg)
{
    while (1)
    {
        MSG m1;
        m1.type = howmessage;
        strcpy(m1.data, lg.name);
        int ret = send(fd, &m1, sizeof(m1), 0);
        if (ret == -1)
        {
            perror("数据发送失败");
            exit(0);
        }
        ret = recv(fd, &m1, sizeof(m1), 0);
        if (ret == -1)
        {
            perror("数据接收失败");
            exit(0);
        }
        int unfinished_tasks = atoi(m1.data);

        // 获取需要处理的离职请求数量
        m1.type = printfdelworker;
        ret = send(fd, &m1, sizeof(m1), 0);
        if (ret == -1)
        {
            perror("数据发送失败");
            exit(0);
        }
        ret = recv(fd, &m1, sizeof(m1), 0);
        if (ret == -1)
        {
            perror("数据接收失败");
            exit(0);
        }

        int pending_del_requests = 0;
        while (m1.type != over)
        {
            pending_del_requests++;
            ret = recv(fd, &m1, sizeof(m1), 0);
            if (ret == -1)
            {
                perror("数据接收失败");
                exit(0);
            }
        }

        char cir[256];
        sprintf(cir, "请选择你要的操作:\n1.发布任务 \n2.删除任务 \n3.私聊\n4.查看任务完成状况(未完成数量[%d])\n5.处理离职请求(待处理数量[%d])\n6.❌退出\n", unfinished_tasks, pending_del_requests);
        printf("%s", cir);
        char buf[16];
        scanf("%s", buf);
        if (strcmp(buf, "1") == 0)
        {
            addtest(fd, lg);
        }
        else if (strcmp(buf, "2") == 0)
        {
            deltesk(fd, lg.name);
        }
        else if (strcmp(buf, "3") == 0)
        {
            // 私聊功能
        }
        else if (strcmp(buf, "4") == 0)
        {
            printf_task(fd, lg.name);
        }
        else if (strcmp(buf, "5") == 0)
        {
            overdelworker(fd);
        }
        else if (strcmp(buf, "6") == 0)
        {
            break;
        }
    }
}

int main()
{
     // 创建一个SOCKET，并且返回一个套接字的文件描述符
     int fd = socket(AF_INET, SOCK_STREAM, 0);
     if (fd == -1)
     {
          perror("");
     }

     // 地址结构体，需要填写IP，端口，地址族（IPV4/IPV6）
     //  typedef struct sockaddr_in MYADDR;
     struct sockaddr_in addr;
     addr.sin_addr.s_addr = stringIPtoNum("192.168.70.37"); // 指定IP
     addr.sin_port = htons(9001);                           // 指定端口
     addr.sin_family = AF_INET;                             // 指定地址协议族

     // 在服务器上与connect对接函数是accept
     while (-1 == connect(fd, (struct sockaddr *)&addr, sizeof(addr)))
     {
          perror("重连中...");
          sleep(1);
     }

     // pthread_t pt;
     // pthread_create(&pt,NULL,work,&fd);

     while (1)
     {
          printf(" ——————————————欢迎进入职工系统！————————————\n");
          printf(" ____________________________\n");
          printf("|  🚉——————1.登录——————🚉    |\n");
          printf("|____________________________|\n");
          printf("|  📟——————2.注册——————📟    |\n");
          printf("|____________________________|\n");
          printf("|  😟——————3.退出——————😟    |\n");
          printf("|____________________________|\n");
          char buf[16];
          scanf("%s", buf);
          getchar();

          if (strcmp(buf, "1") == 0)
          {
               char buff[16];
               printf("请选择你的身份(按任意键退出)");
               printf("1.组员 2.组长 3.总管理员\n");
               scanf("%s", buff);
               getchar();
               if (strcmp(buff, "1") == 0)
               {
                    loginFun(fd);
               }
               else if (strcmp(buff, "2") == 0)
               {
                    B_loginFun(fd);
               }
               else if (strcmp(buff, "3") == 0)
               {
                    boss_loginFun(fd);
               }
          }
          else if (strcmp(buf, "2") == 0)
          {
               char buff[16];
               printf("请选择你的身份(按任意键退出)");
               printf("1.组员 2.组长\n");
               scanf("%s", buff);
               getchar();
               if (strcmp(buff, "1") == 0)
               {
                    registFun(fd);
               }
               else if (strcmp(buff, "2") == 0)
               {

                    B_registFun(fd);
               }
          }
          else if (strcmp(buf, "3") == 0)
          {
               close(fd);
               return 0;
          }
     }

     close(fd);

     return 0;
}